isf 0.1.0

Parsing, Deserialization and Serialization of the Interactive Shader Format.
Documentation
#if __VERSION__ <= 120
varying vec2		left_coord;
varying vec2		right_coord;
varying vec2		above_coord;
varying vec2		below_coord;

varying vec2		lefta_coord;
varying vec2		righta_coord;
varying vec2		leftb_coord;
varying vec2		rightb_coord;

varying vec2		texOffsets[5];
#else
out vec2		left_coord;
out vec2		right_coord;
out vec2		above_coord;
out vec2		below_coord;

out vec2		lefta_coord;
out vec2		righta_coord;
out vec2		leftb_coord;
out vec2		rightb_coord;

out vec2		texOffsets[5];
#endif

void main(void)	{
	//	load the main shader stuff
	isf_vertShaderInit();
	
	
	int			blurLevel = int(floor(blurAmount/6.0));
	float		blurLevelModulus = mod(blurAmount, 6.0);
	float		blurRadius = 0.0;
	float		blurRadiusInPixels = 0.0;
	//	first pass draws edges
	if (PASSINDEX==0)	{
		vec2 texc = vec2(isf_FragNormCoord[0],isf_FragNormCoord[1]);
		vec2 d = 1.0/RENDERSIZE;
		
		left_coord = clamp(vec2(texc.xy + vec2(-d.x , 0)),0.0,1.0);
		right_coord = clamp(vec2(texc.xy + vec2(d.x , 0)),0.0,1.0);
		above_coord = clamp(vec2(texc.xy + vec2(0,d.y)),0.0,1.0);
		below_coord = clamp(vec2(texc.xy + vec2(0,-d.y)),0.0,1.0);
	
		lefta_coord = clamp(vec2(texc.xy + vec2(-d.x , d.x)),0.0,1.0);
		righta_coord = clamp(vec2(texc.xy + vec2(d.x , d.x)),0.0,1.0);
		leftb_coord = clamp(vec2(texc.xy + vec2(-d.x , -d.x)),0.0,1.0);
		rightb_coord = clamp(vec2(texc.xy + vec2(d.x , -d.x)),0.0,1.0);
	}
	//	next three passes are just drawing the texture- do nothing
	
	//	the next four passes do gaussion blurs on the various levels
	else if (PASSINDEX==4 || PASSINDEX==6)	{
		float		pixelWidth = 1.0/RENDERSIZE.x;
		//	pass 4 is sampling 1/8, but writing to 1/4
		if (PASSINDEX==4)	{
			if (blurLevel==1)
				blurRadius = blurLevelModulus/1.5;
			else if (blurLevel>1)
				blurRadius = 4.0;
		}
		//	pass 6 is sampling 1/4 and writing to full-size
		else if (PASSINDEX==6)	{
			if (blurLevel==0)
				blurRadius = blurLevelModulus;
			else if (blurLevel>0)
				blurRadius = 6.0;
		}
		blurRadiusInPixels = pixelWidth * blurRadius;
		texOffsets[0] = isf_FragNormCoord;
		texOffsets[1] = (blurRadius==0.0) ? isf_FragNormCoord : clamp(vec2(isf_FragNormCoord[0]-blurRadiusInPixels, isf_FragNormCoord[1]),0.0,1.0);
		texOffsets[2] = (blurRadius==0.0) ? isf_FragNormCoord : clamp(vec2(isf_FragNormCoord[0]+blurRadiusInPixels, isf_FragNormCoord[1]),0.0,1.0);
		if (PASSINDEX==4)	{
			texOffsets[3] = (blurRadius==0.0) ? isf_FragNormCoord : clamp(vec2(isf_FragNormCoord[0]-(2.0*blurRadiusInPixels), isf_FragNormCoord[1]),0.0,1.0);
			texOffsets[4] = (blurRadius==0.0) ? isf_FragNormCoord : clamp(vec2(isf_FragNormCoord[0]+(2.0*blurRadiusInPixels), isf_FragNormCoord[1]),0.0,1.0);
		}
	}
	else if (PASSINDEX==5 || PASSINDEX==7)	{
		float		pixelHeight = 1.0/RENDERSIZE.y;
		//	pass 5 is sampling 1/14, but writing to 1/4
		if (PASSINDEX==5)	{
			if (blurLevel==1)
				blurRadius = blurLevelModulus/1.5;
			else if (blurLevel>1)
				blurRadius = 4.0;
		}
		//	pass 7 is sampling 1/4 and writing to full-size
		else if (PASSINDEX==7)	{
			if (blurLevel==0)
				blurRadius = blurLevelModulus;
			else if (blurLevel>0)
				blurRadius = 6.0;
		}
		blurRadiusInPixels = pixelHeight * blurRadius;
		texOffsets[0] = isf_FragNormCoord;
		texOffsets[1] = (blurRadius==0.0) ? isf_FragNormCoord : clamp(vec2(isf_FragNormCoord[0], isf_FragNormCoord[1]-blurRadiusInPixels),0.0,1.0);
		texOffsets[2] = (blurRadius==0.0) ? isf_FragNormCoord : clamp(vec2(isf_FragNormCoord[0], isf_FragNormCoord[1]+blurRadiusInPixels),0.0,1.0);
		if (PASSINDEX==5)	{
			texOffsets[3] = (blurRadius==0.0) ? isf_FragNormCoord : clamp(vec2(isf_FragNormCoord[0], isf_FragNormCoord[1]-(2.0*blurRadiusInPixels)),0.0,1.0);
			texOffsets[4] = (blurRadius==0.0) ? isf_FragNormCoord : clamp(vec2(isf_FragNormCoord[0], isf_FragNormCoord[1]+(2.0*blurRadiusInPixels)),0.0,1.0);
		}
	}
	
}